// 构建输出过滤包装器
// 用于拦截并过滤taro-ui的Sass弃用警告
const { spawn } = require('child_process');

// 改进的过滤逻辑 - 更全面地识别和过滤Sass弃用警告
function shouldFilterLine(line) {
  // 转换为小写进行比较，增强匹配能力
  const lowerLine = line.toLowerCase();
  
  // 直接匹配关键词（不区分大小写）
  const keywords = [
    'sass @import rules are deprecated',
    'tint() function is deprecated',
    'the legacy js api is deprecated',
    'repetitive deprecation warnings omitted',
    'deprecation warning [global-builtin]',
    'global built-in functions are deprecated'
  ];
  
  // 检查是否包含任何关键词
  if (keywords.some(keyword => lowerLine.includes(keyword))) {
    return true;
  }
  
  // 检查是否为Sass警告的特殊格式行
  const sassWarningPatterns = [
    /^\s+╷$/,               // Sass警告格式标记1
    /^\s+│\s*@import/,       // Sass @import规则行（带边框线）
    /^\s+│\s*@return mix/,    // Sass mix函数行（带边框线）
    /^\s+╵$/,               // Sass警告格式标记2
    /^\s+node_modules[\\/]+taro-ui/, // taro-ui相关文件路径（带缩进）
    /^\d+\s*\|\s*@import/     // 行号+@import规则（如"1 │ @import"）
  ];
  
  if (sassWarningPatterns.some(pattern => pattern.test(line))) {
    return true;
  }
  
  // 检查是否为Sass警告的其他相关行
  const relatedLines = [
    'use color.mix instead.',
    'more info and automated migrator:',
    'https://sass-lang.com/d/import',
    'https://sass-lang.com/d/legacy-js-api',
    "@import '../variables/default.scss';",
    "@import '../mixins/index.scss';",
    "@import '../mixins/libs/tint';",
    "@import './libs/absolute-center';",
    "@import './libs/clearfix';"
  ];
  
  if (relatedLines.some(text => lowerLine.includes(text.toLowerCase()))) {
    return true;
  }
  
  // 检查是否为带行号的@import规则
  if (/^\d+\s*│\s*@import/.test(line)) {
    return true;
  }
  
  return false;
}

// 从命令行参数中获取原始命令
const args = process.argv.slice(2);
const command = 'taro';
const commandArgs = ['build', ...args];

console.log(`👽 启动Taro构建，过滤弃用警告...`);

// 启动taro构建进程
let originalConsoleWarn;
const taroProcess = spawn(command, commandArgs, {
  stdio: ['inherit', 'pipe', 'pipe'], // 继承stdin，重定向stdout和stderr
  shell: true
});

// 处理输出流，包括处理多行输出的缓冲区
let buffer = '';
function processStreamData(data) {
  buffer += data.toString();
  
  // 按行处理输出
  while (true) {
    const newlineIndex = buffer.indexOf('\n');
    if (newlineIndex === -1) break;
    
    const line = buffer.substring(0, newlineIndex);
    buffer = buffer.substring(newlineIndex + 1);
    
    // 只输出不需要过滤的行
    if (!shouldFilterLine(line) && line.trim()) {
      console.log(line);
    }
  }
}

// 监听标准输出和错误输出
if (taroProcess.stdout) {
  taroProcess.stdout.on('data', processStreamData);
}

if (taroProcess.stderr) {
  taroProcess.stderr.on('data', processStreamData);
}

// 进程结束时处理剩余的缓冲区内容
if (taroProcess) {
  taroProcess.on('close', (code) => {
    // 输出缓冲区中剩余的内容（如果有）
    if (buffer.trim() && !shouldFilterLine(buffer)) {
      console.log(buffer);
    }
    console.log(`\n👽 Taro构建完成，退出码: ${code}`);
    process.exit(code);
  });
}